From 2965c965356d3daf6ae5f84cf75f7808f3d6e4e9 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Wed, 5 Jul 2006 14:31:22 +0100 Subject: [PATCH] [HVM][VMX] More descriptive failed vmentry. Signed-off-by: Xin Li --- xen/arch/x86/hvm/vmx/vmx.c | 22 ++++++++++++++++++++-- xen/include/asm-x86/hvm/vmx/vmx.h | 5 +++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 1f8dd198a7..ed9f6815c0 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2093,8 +2093,26 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs regs) if ( unlikely(exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY) ) { - printk("Failed vm entry (reason 0x%x)\n", exit_reason); - printk("*********** VMCS Area **************\n"); + unsigned int failed_vmentry_reason = exit_reason & 0xFFFF; + + __vmread(EXIT_QUALIFICATION, &exit_qualification); + printk("Failed vm entry (exit reason 0x%x) ", exit_reason); + switch ( failed_vmentry_reason ) { + case EXIT_REASON_INVALID_GUEST_STATE: + printk("caused by invalid guest state (%ld).\n", exit_qualification); + break; + case EXIT_REASON_MSR_LOADING: + printk("caused by MSR entry %ld loading.\n", exit_qualification); + break; + case EXIT_REASON_MACHINE_CHECK: + printk("caused by machine check.\n"); + break; + default: + printk("reason not known yet!"); + break; + } + + printk("************* VMCS Area **************\n"); vmcs_dump_vcpu(); printk("**************************************\n"); domain_crash_synchronous(); diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vmx/vmx.h index 81637d1a17..9e9dd90f32 100644 --- a/xen/include/asm-x86/hvm/vmx/vmx.h +++ b/xen/include/asm-x86/hvm/vmx/vmx.h @@ -133,6 +133,11 @@ extern unsigned int cpu_rev; #define EXIT_REASON_MSR_WRITE 32 #define EXIT_REASON_MWAIT_INSTRUCTION 36 +#define EXIT_REASON_INVALID_GUEST_STATE 33 +#define EXIT_REASON_MSR_LOADING 34 +#define EXIT_REASON_MACHINE_CHECK 41 + + /* * Interruption-information format */ -- 2.30.2